package com.rla.domain.vo;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.rla.common.annotation.ExcelDictFormat;
import com.rla.common.convert.ExcelDictConvert;
import lombok.Data;
import org.checkerframework.checker.formatter.qual.Format;


/**
 * 零售订单视图对象 mall_order
 *
 * @author rla
 * @date 2025-08-08
 */
@Data
@ExcelIgnoreUnannotated
public class MallOrderVo {

    private static final long serialVersionUID = 1L;

    private String id;
    /**
     * 用户ID
     */
    @ExcelProperty(value = "用户ID")
    private String userId;

    /**
     * 订单类型 1售卖 2退货 3积分兑换
     */
    @ExcelProperty(value = "订单类型 1售卖 2退货 3积分兑换")
    private String orderType;

    /**
     * 总数量
     */
    @ExcelProperty(value = "总数量")
    private Long totalNum;

    /**
     * 总金额
     */
    @ExcelProperty(value = "总金额")
    private BigDecimal totalAmount;

    /**
     * 优惠金额
     */
    @ExcelProperty(value = "优惠金额")
    private BigDecimal discountAmount;

    /**
     * 应付金额
     */
    @ExcelProperty(value = "应付金额")
    private BigDecimal payableAmount;

    /**
     * 订单状态 0未支付（有状态不显示） 1已支付 （待取货、待发货）-1、已取消   12待收货   99已完成
     */
    @ExcelProperty(value = "订单状态 0未支付", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "有=状态不显示")
    private String orderStatus;

    /**
     * 退货原因(退货)
     */
    @ExcelProperty(value = "退货原因(退货)")
    private String backReason;

    /**
     * 订单时间
     */
    @ExcelProperty(value = "订单时间")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date orderTime;

    /**
     * 关联订单(退货)
     */
    @ExcelProperty(value = "关联订单(退货)")
    private String assocOrderId;

    /**
     * 售后退货状态 0未退款 1退款中 99完成退款  20申请退款 21同意退款(待商家退款) 22同意退货(待买家发货) 23 拒绝退款/退货 24 待商家收货 25商家收货(待商家退款)
     */
    @ExcelProperty(value = "售后退货状态 0未退款 1退款中 99完成退款  20申请退款 21同意退款(待商家退款) 22同意退货(待买家发货) 23 拒绝退款/退货 24 待商家收货 25商家收货(待商家退款)")
    private String backStatus;

    /**
     * 订单完成时间
     */
    @ExcelProperty(value = "订单完成时间")
    private Date finishTime;

    /**
     * 获赠积分
     */
    @ExcelProperty(value = "获赠积分")
    private Long pointsNum;

    /**
     * 应付积分
     */
    @ExcelProperty(value = "应付积分")
    private Long usePoints;

    /**
     * 退款金额
     */
    @ExcelProperty(value = "退款金额")
    private BigDecimal backAmount;

    /**
     * 退款积分
     */
    @ExcelProperty(value = "退款积分")
    private Long backPointsNum;

    /**
     * 处方文件地址
     */
    @ExcelProperty(value = "处方文件地址")
    private String fileUrls;

    /**
     * 关联电子处方编码
     */
    @ExcelProperty(value = "关联电子处方编码")
    private String rpNo;

    /**
     * 0关联电子处方是否审方 0未审方 1已审方
     */
    @ExcelProperty(value = "0关联电子处方是否审方 0未审方 1已审方")
    private String rpReview;

    /**
     * 收货地址
     */
    @ExcelProperty(value = "收货地址")
    private String receiveUserAddress;

    /**
     * 收货电话
     */
    @ExcelProperty(value = "收货电话")
    private String receiveUserPhone;

    /**
     * 线上支付方式1微信支付 2储值支付 3积分支付
     */
    @ExcelProperty(value = "线上支付方式1微信支付 2储值支付 3积分支付")
    private String onlinePayMode;

    /**
     * 线上支付时间
     */
    @ExcelProperty(value = "线上支付时间")
    private String onlinePayTime;

    /**
     * 快递公司编码
     */
    @ExcelProperty(value = "快递公司编码")
    private String deliveryCode;

    /**
     * 快递公司名称
     */
    @ExcelProperty(value = "快递公司名称")
    private String deliveryName;

    /**
     * 快递单号
     */
    @ExcelProperty(value = "快递单号")
    private String deliveryNo;

    /**
     * 发货/自提时间
     */
    @ExcelProperty(value = "发货/自提时间")
    private String deliveryTime;

    /**
     * 收货时间
     */
    @ExcelProperty(value = "收货时间")
    private String acceptTime;

    /**
     * 是否包邮(0、包邮，1、不包邮)
     */
    @ExcelProperty(value = "是否包邮(0、包邮，1、不包邮)")
    private String isFreeShipping;

    /**
     * 邮费
     */
    @ExcelProperty(value = "邮费")
    private BigDecimal mallPostage;

    /**
     * 收货人姓名
     */
    @ExcelProperty(value = "收货人姓名")
    private String receiveUserName;

    /**
     * 取货时间段
     */
    @ExcelProperty(value = "取货时间段")
    private String timeSlot;

    /**
     * 是否包含积分支付
     */
    @ExcelProperty(value = "是否包含积分支付")
    private String isPoints;

    /**
     * 使用积分数量
     */
    @ExcelProperty(value = "使用积分数量")
    private Long useIntegralNum;

    /**
     * 签名图片地址
     */
    @ExcelProperty(value = "签名图片地址")
    private String picUrl;


    private String openId;

    private List<Map<String,Object>> orderSpeciDetailVoList;

    private MallOrderAddressVo addressVo;

    private String rollbackOrderStatus;
}
